﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Hosting;
using System.Text;
using System.Web.Mvc;
using System.Security.Cryptography;
using System.Globalization;

namespace Ecommerce.Lib
{    
    public class UploadFile
    {
        public static int LIMIT_SIZE_FILE_UPLOAD = 5000000;

        public static string Md5EncryptImages(string stringToHash)
        {
            var md5 = new MD5CryptoServiceProvider();

            byte[] hashValue = md5.ComputeHash(System.Text.Encoding.ASCII.GetBytes(stringToHash));

            var hexString = new StringBuilder(32);

            for (int index = 0; index < hashValue.Length; index++)
            {
                hexString.AppendFormat(CultureInfo.InvariantCulture, "{0:x2}", hashValue[index]);
            }

            return hexString.ToString();
        }
        public static void UploadFileToDirectory(HttpPostedFileBase myFile,string pathDir)
        {
            string fileNameToDb = "";
            //lấy đuôi mở rộng của file vừa upload lên
                string ext = myFile.FileName.Substring(myFile.FileName.LastIndexOf(".") + 1);                
            // Lấy đường dẫn thư mục để kiểm tra file            
            var mapPath = pathDir;             
            if (mapPath != null)
            {               

                var myRoot = new DirectoryInfo(mapPath);

                //lấy tất cả file trong thư mục myRoot
                FileInfo[] fileEntries = myRoot.GetFiles();
                //kiểm tra xem số lượng file trong thư mục vừa lấy có > 0 hay không
                if (fileEntries.Length > 0)
                {
                    //duyệt file để kiểm tra trùng tên file trong directory
                    foreach (FileInfo fileName in fileEntries)
                    {

                        string fName = fileName.ToString();

                        //kiểm tra nếu tên file trong thư mục trùng với tên file vừa upload
                        if (fName.Equals(myFile.FileName))
                        {
                            //kiểm tra nếu chứa đuôi mở rộng thì thay thế bằng ký tự _ (đổi tên file nếu trùng)
                            if (fName.Contains(fileName.Extension))
                            {                                
                                fName = fName.Replace(fileName.Extension, "_");
                            }
                            //đổi tên file vừa upload lên để tránh trùng với file trong thư mục trên server dùng MD5 encrypt
                            string fNameReplace =
                                Md5EncryptImages(DateTime.Now.Hour + "_" + DateTime.Now.Minute +
                                                             DateTime.Now.Second +
                                                             DateTime.Now.Millisecond + DateTime.Now.Year);
                            //lưu file lên server với tên đã được đổi
                            myFile.SaveAs(mapPath + fName + fNameReplace + "." + ext);
                            break;
                        }
                        else
                        {
                            //nếu ko có file nào trùng tên thì upload thẳng lên server
                            myFile.SaveAs(mapPath + myFile.FileName);
                            fileNameToDb = myFile.FileName;
                        }                        
                    }
                }
                else
                {
                    //nếu số lượng file trong thư mục trên server  = 0 thì upload thẳng lên server
                    myFile.SaveAs(mapPath + myFile.FileName);
                }
            }            
        }        
        //delete file module
        public void DeleteFileDb(string pathDir,string fileName)
        {
            try
            {
                var mapPath = HostingEnvironment.MapPath(pathDir);
                if (mapPath != null)
                {
                    if(System.IO.File.Exists(mapPath+""+fileName))
                    {
                        System.IO.File.Delete(mapPath + "" + fileName);   
                    }                    

                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }
    }
}